package com.easy.config.log;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.*;

/**
 * 描述:
 *
 * @author gwj
 * @date 2024年01月04日 15:58
 */

public class MyLog {


    private static final MyMathFormatter mmf = new MyMathFormatter();

    /**
     * 可供使用的日志工具对象
     */
    private static final Logger logger = Logger.getLogger("system");

    public static Logger getLogger(){
        return logger;
    }

    static {
        initializeLogger();
    }

    /**
     * 初始化日志工具的方法
     */
    private static void initializeLogger(){
        //设置记录级别
        logger.setLevel(Level.ALL);

        //不使用自带的父Handler，新建ConsoleHandler
        logger.setUseParentHandlers(false);


        //创建Handler对象，指定输出方式，设置Handler的级别
        ConsoleHandler consoleHandler = new ConsoleHandler();
        consoleHandler.setLevel(Level.ALL);
        consoleHandler.setFormatter(mmf);
        logger.addHandler(consoleHandler);

    }

    /**
     * 格式化输出文本的类
     */
    private static class MyMathFormatter extends Formatter {
        //日期格式化工具对象
        private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");

        //添加日志信息是日志对象会自动调用该方法
        @Override
        public String format(LogRecord record) {

            StringBuilder s = new StringBuilder(100);

            //日期
            s.append(dateFormat.format(new Date()));
            //类名
            s.append("[");
            try {
                s.append(Class.forName(record.getSourceClassName()).getName());
            } catch (ClassNotFoundException ignored) {
            }
            s.append("] ");
            //方法名
            s.append(record.getLevel().toString());

            s.append(" [ ");
            s.append(Thread.currentThread().getName());
            s.append(" ] ");
            //日志内容
            s.append(" - ");
            s.append(str(record.getMessage(),record.getParameters()));

            s.append("\n");

            return s.toString();
        }
    }

    private static String str(String str, Object[] params){
        if(str == null){
            return null;
        }
        if(params == null || params.length==0){
            return str;
        }

        StringBuilder builder = new StringBuilder();
        for (Object param : params) {
            int index = str.indexOf("{}");
            if (index < 0) {
                break;
            }
            String substring = str.substring(0, index);
            builder.append(substring).append(param);
            str = str.substring(index + 2);
        }
        if(!str.isEmpty()){
            builder.append(str.replaceAll("[{}]",""));
        }

        return builder.toString();
    }
}
